from django.contrib.admin.models import LogEntry, ADDITION, CHANGE, DELETION
from django.contrib.contenttypes.models import ContentType
from django.utils import timezone

def log_operation(admin_id, action, message, object_id=None, object_repr=None, content_type_id=None):
    """
    记录管理员操作日志
    
    参数:
        admin_id: 管理员ID
        action: 操作类型 ('add', 'change', 'delete')
        message: 操作描述
        object_id: 操作对象的ID（可选）
        object_repr: 操作对象的字符串表示（可选）
        content_type_id: 操作对象的ContentType ID（可选）
    """
    # 转换操作类型
    action_flag = {
        'add': ADDITION,
        'change': CHANGE,
        'delete': DELETION
    }.get(action, CHANGE)
    
    # 创建日志记录
    LogEntry.objects.create(
        action_time=timezone.now(),
        user_id=admin_id,
        content_type_id=content_type_id,
        object_id=str(object_id) if object_id else None,
        object_repr=object_repr or '',
        action_flag=action_flag,
        change_message=message
    )

def get_admin_logs(page=1, page_size=10, user_id=None, action_flag=None, start_date=None, end_date=None):
    """
    获取管理员操作日志
    
    参数:
        page: 页码
        page_size: 每页记录数
        user_id: 管理员ID（可选）
        action_flag: 操作类型（可选）
        start_date: 开始日期（可选）
        end_date: 结束日期（可选）
    """
    queryset = LogEntry.objects.all()
    
    # 应用过滤条件
    if user_id:
        queryset = queryset.filter(user_id=user_id)
    if action_flag:
        queryset = queryset.filter(action_flag=action_flag)
    if start_date:
        queryset = queryset.filter(action_time__gte=start_date)
    if end_date:
        queryset = queryset.filter(action_time__lte=end_date)
    
    # 按时间倒序排序
    queryset = queryset.order_by('-action_time')
    
    # 分页
    start = (page - 1) * page_size
    end = start + page_size
    
    # 获取总记录数
    total = queryset.count()
    
    # 获取当前页的记录
    logs = queryset[start:end]
    
    # 格式化日志记录
    formatted_logs = []
    for log in logs:
        formatted_log = {
            'id': log.id,
            'action_time': timezone.localtime(log.action_time).strftime('%Y-%m-%d %H:%M:%S'),
            'user_id': log.user_id,
            'content_type_id': log.content_type_id,
            'object_id': log.object_id,
            'object_repr': log.object_repr,
            'action_flag': log.action_flag,
            'change_message': log.change_message,
            'content_type': {
                'id': log.content_type.id,
                'app_label': log.content_type.app_label,
                'model': log.content_type.model
            } if log.content_type else None
        }
        formatted_logs.append(formatted_log)
    
    return {
        'total': total,
        'total_pages': (total + page_size - 1) // page_size,
        'current_page': page,
        'page_size': page_size,
        'items': formatted_logs
    } 